package com.liu.design.building.singleton;

/**
 * @author LIU
 * @version 1.0
 * @date 2023/8/7 10:39
 * @description 单例模式，懒汉模式
 * 优点：节省了内存
 * 缺点：线程不安全，双重检查锁，解决线程不安全问题
 */
public class LazySingleton {
    private volatile static LazySingleton instance = null;

    private LazySingleton() {
    }

    public static  LazySingleton getInstance() {
        // 检查是否要阻塞
        if (instance == null) {
            synchronized (instance) {
                // 检查是否要创建实例
                if (instance == null) {
                    instance = new LazySingleton();
                    // 指令重排序的问题 volatile
                }
            }
        }
        return instance;
    }
}
